<?php
/**
 * AtividadeForm Registration
 * @author  <your name here>
 */
class AtividadeForm extends TPage
{
    protected $form; // form
    
    /**
     * Class constructor
     * Creates the page and the registration form
     */
    function __construct()
    {
        parent::__construct();
        
        // creates the form
        $this->form = new TForm('form_Atividade');
        $this->form->class = 'tform'; // CSS class
        $this->form->style = 'width: 100%';
        
        // add a table inside form
        $table = new TTable;
        $table-> width = '840px';       
        
        $notebook = new TNotebook(840,470);
        
        $table->addRow()->addCell(new TXMLBreadCrumb('menu.xml', 'AtividadeList'))->colspan = 2;
                
        $row = $table->addRow();
        $row->class = 'tformtitle'; // CSS class
        $row->addCell( new TLabel('Cadastro de Atividade') )->colspan = 1;                       

        $id_atividade                   = new TEntry('id_atividade');
        $titulo                         = new TEntry('titulo');
        
        $table->addRowSet(Array(new TLabel('ID'), $id_atividade , new TLabel('Titulo (*)'), $titulo));
               
        $table->addRowSet($notebook);
        
        $this->form->add($table);
        
        // creates the containers for each notebook page
        $page1 = new TTable;
        $page2 = new TTable;
        
        // adds two pages in the notebook
        $notebook->appendPage('Geral', $page1);
        $notebook->appendPage('Atendimento', $page2);
        
        // add a row for the form title
                
        //Campos Atendimento
        $frame_atend = new TFrame(780, 430);
        //$frame_atend->setLegend('Atendimento');
        $frame_atend->style .= ';margin: 4px';
        
        $id_atendimento                  = new TEntry('id_atendimento');
        $desc_atendimento                = new TEntry('desc_atendimento'); 
        $id_atendente                    = new TDBCombo('id_solic', 'permission', 'SystemUser', 'id', 'name');
        $id_tipo_atend                   = new TDBCombo('id_tp', 'permission', 'Tipo', 'id_tipo', 'nome');
        $dt_atendimento                  = new TDate('dt_atend');
        $tempo_atendimento               = new TEntry('tempo_atend');
        
        $id_atendimento->setSize(40);
        $id_atendimento->setEditable(false);
        $desc_atendimento->setSize(500);
        $dt_atendimento->setSize(80);
        $dt_atendimento->setMask('dd/mm/yyyy');
        $tempo_atendimento->setSize(80);
                 
        $multifield_atendimento = new TMultiField('atend');
        $multifield_atendimento->setClass('Atendimento');
        $multifield_atendimento->addField('id_atendimento', 'ID',  $id_atendimento, 60);
        $multifield_atendimento->addField('desc_atend','Descrição', $desc_atendimento, 250);
        $multifield_atendimento->addField('id_atendente', 'Atendente', $id_atendente , 150);
        $multifield_atendimento->addField('id_tipo', 'Tipo Atendimento', $id_tipo_atend , 150);
        $multifield_atendimento->addField('dt_atendimento', 'Data', $dt_atendimento , 80);
        $multifield_atendimento->addField('tempo_atendimento', 'Tempo', $tempo_atendimento , 80);
        $multifield_atendimento->setOrientation('vertical');
        
        $multifield_atendimento->setHeight(140);
       
        $frame_atend->add( $multifield_atendimento );
        //Fim campos atendimento
               
        // create the form fields
        $id_projeto                     = new TDBCombo('id_projeto', 'permission', 'Projeto', 'id_projeto', 'titulo');
        $id_situacao                    = new TDBCombo('id_situacao', 'permission', 'Situacao', 'id_situacao', 'nome');
        $id_prioridade                  = new TDBCombo('id_prioridade', 'permission', 'Prioridade', 'id_prioridade', 'nome');
        $id_tipo                        = new TDBCombo('id_tipo', 'permission', 'tipo', 'id_tipo', 'nome');
        $id_cliente                     = new TDBCombo('id_cliente', 'permission', 'Cliente', 'id_cliente', 'nome');
        $id_solicitante                 = new TDBCombo('id_solicitante', 'permission', 'SystemUser', 'id', 'name');
        $id_destinatario                = new TDBCombo('id_destinatario', 'permission', 'SystemUser', 'id', 'name');
        //$descricao                      = new TText('descricao');
        $descricao                      = new THtmlEditor('descricao');
        $dt_inicial                     = new TDate('dt_inicial');
        $dt_final                       = new TDate('dt_final');
        $tempo_estimado                 = new TEntry('tempo_estimado');


        // define the sizes
        $id_atividade->setSize(50);
        $id_projeto->setSize(150);
        $id_situacao->setSize(150);
        $id_prioridade->setSize(150);
        $id_tipo->setSize(150);
        $id_cliente->setSize(150);
        $id_solicitante->setSize(150);
        $id_destinatario->setSize(150);
        $titulo->setSize(400);
        $descricao->setSize(600, 200);
        $dt_inicial->setSize(100);
        $dt_final->setSize(100);
        $tempo_estimado->setSize(50);
        $dt_inicial->setMask('dd/mm/yyyy');
        $dt_final->setMask('dd/mm/yyyy');
        $id_atividade->setEditable(false);
        $tempo_estimado->setmask('99999');

        // validations
        $titulo->addValidation('Titulo', new TRequiredValidator);
        $descricao->addValidation('Descrição', new TRequiredValidator);


        // add one row for each form field
        $row = $page1->addRow();
        $row->addCell( new TLabel('Descrição (*):'));
        $row->addCell( $descricao)->colspan = 3;        
        
        $page1->addRowSet( new TLabel('Projeto:'), $id_projeto, new TLabel('Cliente:'), $id_cliente );
        $page1->addRowSet( new TLabel('Situação:'), $id_situacao, new TLabel('Prioridade:'), $id_prioridade );        
        $page1->addRowSet( new TLabel('Solicitante:'), $id_solicitante, new TLabel('Atribuido a:'), $id_destinatario );
        $page1->addRowSet( new TLabel('Data Inicial:'), $dt_inicial, new TLabel('Data Final:'), $dt_final );
        $page1->addRowSet( new TLabel('Tempo Estimado (Hrs):'), $tempo_estimado, new TLabel('Tipo:'), $id_tipo );
        
        $page2->addRowSet($frame_atend);

        $this->form->setFields(array($id_atividade,$id_projeto,$id_situacao,$id_prioridade,$id_tipo,$id_cliente,$id_solicitante,$id_destinatario,$titulo,$descricao,$dt_inicial,$dt_final,$tempo_estimado, $multifield_atendimento));


        // create the form actions
        $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'ico_save.png');
        $new_button  = TButton::create('new',  array($this, 'onEdit'), _t('New'),  'ico_new.png');

        $list_button=new TButton('list');
        $list_button->setAction(new TAction(array('AtividadeList','onReload')), _t('Back to the listing'));
        $list_button->setImage('ico_datagrid.png');        

        $this->form->addField($save_button);
        $this->form->addField($new_button);
        $this->form->addField($list_button);
        
                
        $buttons_box = new THBox;
        $buttons_box->add($save_button);
        $buttons_box->add($new_button);
        $buttons_box->add($list_button);
        
        // add a row for the form action
        $row = $table->addRow();
        $row->class = 'tformaction'; // CSS class
        $row->addCell($buttons_box)->colspan = 1;
        
        TScript::create('setTimeout(function() { $("input[name=\'titulo\']").focus() }, 500);');
        
        parent::add($this->form);
    }

    /**
     * method onSave()
     * Executed whenever the user clicks at the save button
     */
    function onSave()
    {
        try
        {
            TTransaction::open('permission'); // open a transaction
            
            // get the form data into an active record Atividade
            $object = $this->form->getData('Atividade');
            $this->form->validate(); // form validation           
                        
            if( $object->atend )
            {
                foreach( $object->atend as $atend )
                {
                        
                    $atend->dt_atend = TDate::date2us($atend->dt_atend);
                    $object->addAtendimento( $atend );
                }
            } 
            
            //converte as datas para o formato americado para salvar na base de dados.
            $object->dt_inicial = TDate::date2us($object->dt_inicial);
            $object->dt_final   = TDate::date2us($object->dt_final); 
                                                
            $object->store(); // stores the object

            $object->dt_inicial = TDate::date2br($object->dt_inicial);
            $object->dt_final   = TDate::date2br($object->dt_final); 
                        
            $this->form->setData($object); // keep form data
            TTransaction::close(); // close the transaction
            
            // shows the success message
            new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
        }
        catch (Exception $e) // in case of exception
        {
            new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
            $this->form->setData( $this->form->getData() ); // keep form data
            TTransaction::rollback(); // undo all pending operations
        }
    }
    
    /**
     * method onEdit()
     * Executed whenever the user clicks at the edit button da datagrid
     */
    function onEdit($param)
    {
        try
        {
            if (isset($param['key']))
            {
                $key=$param['key'];  // get the parameter $key
                TTransaction::open('permission'); // open a transaction
                $object = new Atividade($key); // instantiates the Active Record
                
                $object->atend = $object->getAtendimentos();
                
                //converte a data para formato brasileiro na abertura da pagina
                $object->dt_inicial = TDate::date2br($object->dt_inicial);
                $object->dt_final   = TDate::date2br($object->dt_final);                
                
                $this->form->setData($object); // fill the form
                TTransaction::close(); // close the transaction
            }
            else
            {
                $this->form->clear();
            }
        }
        catch (Exception $e) // in case of exception
        {
            new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
            TTransaction::rollback(); // undo all pending operations
        }
    }
}
